package net.gdface.sdk.fse;

/**
 * 特征码内存搜索引擎(feature search engine)接口<br>
 * @author guyadong
 *
 */
public interface FeatureSe {
	/**
	 * 	在内存表中根据比对相似度进行特征码搜索
	 * @param code 要比对的特征码
	 * @param sim 相似度阀值
	 * @param rows  最大返回的记录数
	 * @return 返回包含相似度(降序)的结果数组,如果没有查到匹配的记录则返回空数组
	 */
	public CodeBean[] searchCode(byte[] code, double sim, int rows);
	/**
	 * 根据特征码ID在表中查找指定的记录
	 * @param featureId 特征码ID
	 * @return 返回指定的特征记录,没有找到则返回{@code null},{@code featureId}为{@code null}或空返回{@code null}
	 */
	public CodeBean getFeature(byte[] featureId);

	/**
	 * 添加一条特征码到内存表<br>
	 * @param featureId 特征码ID(MD5校验码),为null时,native library会自动计算MD5作为特征码ID
	 * @param feature 特征码字节数组,为{@code null}时返回false
	 * @param imgMD5 特征所属图的MD5,可为null
	 * @return 添加成功返回true, 否则返回false
	 */
	public boolean addFeature(byte[] featureId,byte[]feature, String imgMD5);
	/**
	 * 添加一条特征码到内存表<br>
	 * @param featureId 特征码ID(MD5校验码),为null时,native library会自动计算MD5作为特征码ID
	 * @param feature 特征码字节数组,为{@code null}时返回false
	 * @param appid 应用id,由调用者定义,可为null
	 * @return 添加成功返回true, 否则返回false
	 */
	boolean addFeature(byte[] featureId, byte[] feature, long appid);
	/**
	 * 根据特征码ID中表中删除指定的记录
	 * @param featureId 特征码MD5校验码
	 * @return 成功删除则返回true,否则返回false
	 */
	public boolean removeFeature(byte[] featureId);

	/**
	 * 
	 * @return 内存表中元素个数
	 */
	public int size();
}
